/*
 License
 
 Copyright © 2012 Kevin Kimmich
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
 in the Software without restriction, including without limitation the rights to 
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 the Software, and to permit persons to whom the Software is furnished to do so, 
 subject to the following conditions:
 
 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
 INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
 FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */

/**
 @file
 Method functions
 */
#ifndef _kuato_method_h
#define _kuato_method_h

#ifdef __cplusplus
extern "C"
{
#endif	
	
	/**
	 Initialize a method object
	 @param h The server object. NULL for client methods.
	 @param ctx The connection context.
	 @param m The method pointer.
	 @param t the context type.
	 */
	void method_init(http_server_object* h,connection_context* ctx, method* m,context_type t);

	
	/**
	 Cleanup the resources associated with the method object.
	 */
	void method_cleanup(method* m);
	
	/**
	 Destroy the method and free up any resources associated with it.
	 */
	void method_destroy(method* m);
	
	/**
	 Allocate a client method.
	 @param ctx The connection context.
	 */
	method* create_client_method(connection_context* ctx);
	
	/**
	 Allocate a server method.
	 @param h The HTTP server object.
	 @param ctx The connection context.
	 */
	method* create_server_method(http_server_object* h,connection_context* ctx);
	
	/**
	 Compress the stream before transmit. Applicable only to discrete methods.
	 */
	void method_do_compression(method* m);

#ifdef __cplusplus
}
#endif	

#endif